import { defineStore } from 'pinia'
import request from '@/utils/request'
import { Profile } from '@/types/user'
import { ApiRes } from '@/types/data'
import { setUserInfo, getUserInfo, removeUserInfo } from '@/utils/storage'
import useStore from '..'
const useUserStore = defineStore('user', {
  state() {
    return {
      userInfo: getUserInfo() as Profile, // 个人信息
    }
  },
  actions: {
    // 清除个人信息的方法
    resetUserInfo() {
      // 清除pinia
      this.userInfo = {} as Profile
      // 清除本地
      // removeUserInfo()
      setUserInfo({} as Profile)
      // 清空购物车
      // const { cart } = useStore()
      // cart.clearCart()
    },
    // 账号+密码登录
    async loginByAccount(data: { account: string; password: string }) {
      const res = await request.post<ApiRes<Profile>>('/login', data)
      // 存pinia
      this.userInfo = res.data.result
      // 存本地
      setUserInfo(res.data.result)

      // 登录后, 本地购物车合并
      const { cart } = useStore()
      cart.mergeList()
    },
    // 填写手机号获取短信验证码
    async getCode(mobile: string) {
      await request.get('/login/code', { params: { mobile } })
    },
    // 手机号+验证码登录
    async loginByCode(data: { mobile: string; code: string }) {
      const res = await request.post<ApiRes<Profile>>('/login/code', data)
      this.userInfo = res.data.result
      // 存pinia
      this.userInfo = res.data.result
      // 存本地
      setUserInfo(res.data.result)
      // 登录后, 本地购物车合并
      const { cart } = useStore()
      cart.mergeList()
    },
    // QQ三方登录(情况1)
    async qqLogin(unionId: string, source: number = 6) {
      const res = await request.post<ApiRes<Profile>>('/login/social', {
        unionId,
        source,
      })
      // 存储个人信息到仓库和本地
      this.userInfo = res.data.result
      setUserInfo(res.data.result)
      // 登录后, 本地购物车合并
      const { cart } = useStore()
      cart.mergeList()
    },
    // 三方登录发送已有账号验证码(情况2发送验证码)
    async QQLoginCode(mobile: string) {
      await request.get('/login/social/code', {
        params: { mobile },
      })
    },
    // 绑定手机号登录(情况2)
    async bindMobileLogin(unionId: string, mobile: string, code: string) {
      const res = await request.post<ApiRes<Profile>>('/login/social/bind', {
        unionId,
        mobile,
        code,
      })
      // 存储个人信息到仓库和本地
      this.userInfo = res.data.result
      setUserInfo(res.data.result)

      // 登录后, 本地购物车合并
      const { cart } = useStore()
      cart.mergeList()
    },
    // 三方登录完善信息发送验证码(情况3发送验证码)
    async sendQQPathMsg(mobile: string) {
      await request.get('/register/code', {
        params: {
          mobile,
        },
      })
    },
    // 无账号  完善信息登录(情况3)
    async qqPatchLogin(data: any) {
      const res = await request.post<ApiRes<Profile>>(
        `/login/social/${data.openId}/complement`,
        data
      )
      // 1. 保存用户信息到 state 中
      this.userInfo = res.data.result
      setUserInfo(res.data.result)

      // 登录后, 本地购物车合并
      const { cart } = useStore()
      cart.mergeList()
    },
  },
})
export default useUserStore
